/**
 * 按奇偶排序数组
 * 奇数 odd
 * 偶数 even
 * LeetCode 922
 */

public class test1 {

    public static void swap(int[] nums,int i, int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }

//    public int[] sortArrayByParityII(int[] nums) {
//        // 双指针：even先指向最小的偶数位0 odd指向最小的奇数位1
//        int even = 0, odd = 1;
//        while(even < nums.length && odd < nums.length) {
//            /*
//            * 只看最后一位
//            * 如果最后一位是奇数，就和odd下标元素进行交换
//            * 如果最后一位是偶数，就和even下标元素进行交换
//            * 直至odd或even其中一个月结
//            * */
//            if(nums[nums.length-1] % 2 == 0){
//                swap(nums,even,nums.length-1);
//                even += 2;
//            }else{
//                swap(nums,odd,nums.length-1);
//                odd += 2;
//            }
//        }
//        return nums;
//    }

    public int[] sortArrayByParityII(int[] nums) {
        int n=nums.length;
        for(int even=0,odd=1;odd<n && even<n;){
            if((nums[n-1]&1)==1){
                swap(nums,odd,n-1);
                odd +=2;
            }else{
                swap(nums,even,n-1);
                even +=2;
            }
        }
        return nums;
    }
}
